export default {
	namespaced: true, // 命名空间
	// 状态
	state: {
		cartItems: uni.getStorageSync("cartItems") ||  [] // 购物车的数据
	},
	// 修改state状态的唯一途径
	mutations: {
		addToCart(state, item) {
			// console.log('mutation中--', item);
			// 1. 判断当前商品是否存在于cartItems中 find
			// 2. 如果存在, 直接修改数量 + 1
			// 3. 如果不存在, push追加
			// includes -> 布尔值 / find -> 找到了 返回的是项 / 找不到 返回的是undefined
			const existedItem = state.cartItems.find(v => v.goods_id === item.goods_id)
			if (existedItem) {
				// 存在 
				existedItem.goods_count ++ 
			} else {
			  state.cartItems.push(item) 
			}
			// 持久化存储
			uni.setStorageSync("cartItems", state.cartItems)
		},
		// 修改商品状态
		updateCartState(state, item) {
			const existedItem = state.cartItems.find(v => v.goods_id === item.goods_id)
			console.log('-----', existedItem);
			if (existedItem) {
				existedItem.goods_state = !existedItem.goods_state
				// 持久化存储
				uni.setStorageSync("cartItems", state.cartItems)
			}
		},
		// 修改商品数量
		updateCartCount(state, { item, num }) {
			const existedItem = state.cartItems.find(v => v.goods_id === item.goods_id)
			if (existedItem) {
				existedItem.goods_count = num
				// 持久化存储
				uni.setStorageSync("cartItems", state.cartItems)
			}
		},
		// 删除商品
		removeCartItem(state, item) {
			state.cartItems = state.cartItems.filter(v => v.goods_id !== item.goods_id)
			// 持久化存储
			uni.setStorageSync("cartItems", state.cartItems)
		},
		// 修改商品的选中状态
		updateAllCartState(state, isCheckAll) {
			state.cartItems.forEach(item => item.goods_state = isCheckAll)
			// 持久化存储
			uni.setStorageSync("cartItems", state.cartItems)
		}
	},
	// 处理异步
	actions: {
		
	},
	// 基于state派生新的状态
	getters: {
		// 购物车中商品的数量
		total(state) {
			// 求和 reduce 
			return state.cartItems.reduce((sum, item) => sum + item.goods_count, 0)
		},
		// 全选 -> 基于所有的商品小选框 - 如果都选中, 当前的全选框才是选中
		isCheckAll(state) {
			// every some
			return state.cartItems.every(item => item.goods_state)
		},
		// 结算 - 已选中的商品数量
		isCheckedNum(state) {
			// 1. forEach
			// let sum = 0
			// state.cartItems.forEach(item => {
			// 	if (item.goods_state) {
			// 		sum += item.goods_count
			// 	}
			// })
			// return sum
			
			// 2. filter +  reduce
		  return	state.cartItems.filter(item => item.goods_state).reduce((sum, item) => sum + item.goods_count, 0)
		},
		isCheckedPrice(state) {
			return	state.cartItems.filter(item => item.goods_state).reduce((sum, item) => sum + item.goods_count * item.goods_price, 0)
		}
	}
}